解決済み: inoue2002がpull request出してくれた Scrapbox-Duplicator を GitHub Action で使う
public.icon
設定していく
Importing 5978 pages to "/***"...
error: Uncaught (in promise) undefined when importing pages: import failed
const error = new Error();
^
at file:///home/runner/work/Scrapbox-Duplicator/Scrapbox-Duplicator/index.ts:52:19
at eventLoopTick (ext:core/01_core.js:189:11)
Error: Process completed with exit code 1.
なんでだろう?env系は正しそう
/tkgshn-privateから引っ張ってくるところまではいけてるけど、/tkgshnに入れることはできてないっぽい
他のプロジェクトでやってみると、動いた。
/tkgshn-stuff(ほぼページがない)から引っ張ってきて、/tkgshnに流すのはいけたtkgshn.icon
ローカルで実行する方法がわからなかったため、tkgshn.iconの環境でdebugは出来ていない。
仮説としては、「importする量が多すぎる」気がする
tkgshn.icon既存のDESTINATION_PROJECT_NAMEと、SOURCE_PROJECT_NAMEの差分がある場合はそれを反映して、ない場合は何もしないようにコードを書き換えて欲しい。
ChatGPT.icon既存の DESTINATION_PROJECT_NAME と SOURCE_PROJECT_NAME の差分を確認し、差分がある場合のみ反映するようにコードを変更するには、まず両方のプロジェクトからページをエクスポートして、それらを比較する機能を追加する必要があります。以下に、そのための基本的なアプローチを示します。
1. **両プロジェクトからページをエクスポート**:
まず、exportPages 関数を使用して、SOURCE_PROJECT_NAME と DESTINATION_PROJECT_NAME からページをエクスポートします。
2. **ページの比較**:
エクスポートされたページを比較して、SOURCE_PROJECT_NAME に存在し、DESTINATION_PROJECT_NAME に存在しないページを特定します。
3. **差分のインポート**:
差分があるページのみを importPages 関数を使用して DESTINATION_PROJECT_NAME にインポートします。
以下は、このプロセスを実装するための疑似コードです。実際のコードには、エラーハンドリングやAPIの制限に対応するための追加のロジックが必要になる場合があります。
`typescript
// 既存のコードに追加
async function exportProjectPages(projectName: string): Promise<Page[]> {
const result = await exportPages(projectName, { sid, metadata: true });
if (!result.ok) {
// エラーハンドリング
throw new Error(Error exporting pages from ${projectName});
}
return result.value.pages;
}
async function findNewPages(sourcePages: Page[], destinationPages: Page[]): Promise<Page[]> {
const destinationTitles = new Set(destinationPages.map(page => page.title));
return sourcePages.filter(page => !destinationTitles.has(page.title));
}
// メインの処理
const sourcePages = await exportProjectPages(exportingProjectName);
const destinationPages = await exportProjectPages(importingProjectName);
const newPages = await findNewPages(sourcePages, destinationPages);
if (newPages.length === 0) {
console.log("No new pages to import.");
} else {
console.log(Importing ${newPages.length} new pages to "${importingProjectName}"...);
// newPages をインポートする処理
}
`
このコードは、SOURCE_PROJECT_NAME と DESTINATION_PROJECT_NAME の両方からページをエクスポートし、タイトルを基にして新しいページを特定し、それらのページのみをインポートします。実際の実装では、ページの内容も比較する必要があるかもしれませんが、これはAPIの提供する情報と、どの程度の差分を重要とみなすかに依存します。
これを適用したかったけど、denoとかがよくわからんくてローカルで実行できていない。
あ、/blu3moでおそらく同じエラー今ぶつかってて対応中blu3mo.icon だよねtkgshn.icon*3
まじかinoue2002.icon
なんだろう
ソースコード自体はいじってないからなぁ
特定のpublic先に送れないってことか
特定の~というよりかは、自分の場合だと/tkgshnには入る。でも、ページ数が多いプロジェクトから引っ張ってくると(多分反映する数が多くなると)動かないtkgshn.icon
あと今思ったんだけど、スクリプトのlogのせいで、非公開のページのタイトルもGitHubActionsで他人に見られてしまうな
消しちゃってもいいかもねinoue2002.icon
https://gyazo.com/8a04003d9236162b39a0b7f32d79ff72
あー、importproject/***になるけど、タイトルは見れるようになってるのねtkgshn.icon
入れる枚数の問題かな?youkan-brainからinoue2002に移動してるんだけど、非公開3700で、そこから公開しているのが300ぐらいしかないから、二人との違いでいうとそこな気がする?
これは試したけど違うみたいblu3mo.icon
「/blu3moの中身をコピーしたプロジェクトA → プロジェクトB」のケースでduplicatorはうまく動いた なので、原因はページ数でもページ内容でもない
原因は部分的に分かったblu3mo.icon
code:titles
CMU(Carnegie Mellon University) -.icon
/icons/わかる.icon
これらのタイトルは、①何かしらのハックを狙って作ったもの ②https://を含むURL のどちらか
なるほどtkgshn.icon*5
確認したこと
これらのタイトルを持つページを今作ろうとすると、何かしらのフォーマットの処理がされる
([ ]を外すとか、.iconを消すとか、https://を消すとか)
手動でexport → importした場合も同様に、何かしらの処理がされる
予想
これらのページは、昔(フォーマットの処理がscrapboxに実装するより前)に作られたillegalなタイトル
APIを叩く形でexport → importした場合に、その処理が入らない代わりにエラーが起きるのだと思う
案1. https://から始まるタイトルからhttps://を削除する
blu3mo.iconが勝手に編集してそれらを削除したので、一旦まずduplicator実行してみて欲しい
ダメなら2へ
あ、そういうことか。tkgshn.icon*2
案2. タイトルに[ ]が含まれるページのタイトルを編集する
https://gyazo.com/f1354509d3d17b4536735a715bd095b6
この辺
消してみたtkgshn.icon
Uncaught (in promise) undefined when importing pages: import failed
を見るにどこか特定のページが悪さをしている説ある?
importしようとしたページがundefinde的な
追記
const res = await fetch(
^
at async mainFetch (ext:deno_fetch/26_fetch.js:277:12)
at async fetch (ext:deno_fetch/26_fetch.js:504:7)
at async file:///home/runner/work/Scrapbox-Duplicator/Scrapbox-Duplicator/index.ts:46:18
Error: Process completed with exit code 1.
Scrapboxのリミットに引っかかったと思ったら、/tkgshnには反映されていたtkgshn.icon
https://gyazo.com/e438ef6ce7b0debf116afbaaca40a5a5
これは多分問題ないはずblu3mo.icon
なぜかconnection closedになってしまうけど、scrapbox側でのimport処理は問題なく行われているかと思うblu3mo.icon
つまり、同じerror?tkgshn.icon
connection closed before message completedは僕の環境でも今も発生するけど、動いているので一旦よしとするblu3mo.icon
了解、終戦とします!!tkgshn.icon
終戦ナイス!お疲れ様でした!inoue2002.icon*2